home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-27 | 2.4 KB | 82 lines | [TEXT/CCL2] |
- ;;; These routines are strictly for debugging the parser. They could
- ;;; be removed from the system later.
-
- ;;; define some debugging stuff
- ;;; Here's the debugging control:
- ;;; Capabilities:
- ;;; record start (line,token,production,k)
- ;;; record end (line,token,prodection,k)
- ;;; print end (line,token,prodection,k,value)
- ;;; break start
- ;;; break end
-
- (define *parser-debug-options* '())
- (define *parser-debug-lines* '())
- (define *parser-debug-id* 0)
-
- (define (watch-lines . lines)
- (setf *parser-debug-lines* lines))
-
- (define (watching-this-line?)
- (and (not (eq? *parser-debug-lines* 'none))
- (or (null? *parser-debug-lines*)
- (and (>= *current-line* (car *parser-debug-lines*))
- (or (null? (cdr *parser-debug-lines*))
- (<= *current-line* (cadr *parser-debug-lines*)))))))
-
- (define (ptrace-print-obj x)
- (pprint x))
-
- (define (ptrace-breakpoint)
- (error "Breakpoint~%"))
-
- (define (parser-show-context id tag msg)
- (format '#t "~A parse of ~A(~A) Line: ~A Token: ~A"
- msg tag id *current-line* *token*)
- (when (not (null? *token-args*))
- (format '#t " ~A" *token-args*))
- (format '#t "~%"))
-
- (define (ptrace-clear)
- (setf *parser-debug-options* '()))
-
- (define (ptrace-pop)
- (pop *parser-debug-options*))
-
- (define (ptrace-watch . things)
- (dolist (x things)
- (push (cons x 'watch) *parser-debug-options*)))
-
- (define (ptrace-show . things)
- (dolist (x things)
- (push (cons x 'show) *parser-debug-options*)))
-
- (define (ptrace-break . things)
- (dolist (x things)
- (push (cons x 'break) *parser-debug-options*)))
-
- ;;; Routines called by the trace-parser macro
-
- (define (tracing-parse/entry tag)
- (let ((all? (assq 'all *parser-debug-options*))
- (this? (assq tag *parser-debug-options*)))
- (cond ((or all? this?)
- (incf *parser-debug-id*)
- (parser-show-context *parser-debug-id* tag "Entering")
- (when (and this? (eq? (cdr this?) 'break))
- (ptrace-breakpoint))
- *parser-debug-id*)
- (else 0))))
-
- (define (tracing-parse/exit tag id res)
- (let ((all? (assq 'all *parser-debug-options*))
- (this? (assq tag *parser-debug-options*)))
- (when (and (or all? this?) (not (eq? tag 0)))
- (setf (dynamic *returned-obj*) res)
- (parser-show-context id tag "Exiting")
- (when (and this? (eq? (cdr this?) 'show))
- (ptrace-print-obj res))
- (when (and this? (eq? (cdr this?) 'break))
- (ptrace-breakpoint)))))
-
-